package org.x.commonmod.util;

import cn.idev.excel.ExcelWriter;
import cn.idev.excel.FastExcel;
import jakarta.servlet.http.HttpServletResponse;
import org.x.commonmod.GlobalEnumConverter;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

/**
 * Excel工具类：统一创建ExcelWriter，自动注册全局枚举转换器
 */
public class ExcelUtils {

    /**
     * 创建ExcelWriter并自动注册枚举转换器
     * @param outputStream 输出流（如response.getOutputStream()）
     * @return ExcelWriter实例（已注册GlobalEnumConverter）
     */
    public static ExcelWriter createWriter(OutputStream outputStream) {
        return FastExcel
                .write(outputStream)
                // 自动注册全局枚举转换器，所有导出场景共用
                .registerConverter(new GlobalEnumConverter())
                .build();
    }

    /**
     * 简化Excel下载响应头设置
     * @param response 响应对象
     * @param fileName 导出文件名（不带后缀）
     * @throws IOException 流异常
     */
    public static void setDownloadHeader(HttpServletResponse response, String fileName) throws IOException {
        // 处理中文文件名编码
        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name())
                .replaceAll("\\+", "%20"); // 解决空格编码问题

        // 设置响应头
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("Content-Disposition",
                "attachment;filename*=UTF-8''" + encodedFileName + ".xlsx");
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
    }
}
